The present invention relates to systems for verifying data transferred between a user buffer and a storage device. More particularly, the present invention relates to use of characters combined with data to verify the validity of data, as well as the integrity of the data path.
In a typical computer system, a host computer system communicates with a disc drive or some other storage device to store and retrieve data. The host system generally includes a host microprocessor and other related items, such as drivers, buffers and other communication elements. The disc drive, on the other hand, relates to a storage media, such as one or more magnetic discs, a disc drive microprocessor, a storage buffer, as well as other related software and hardware. Data is transferred between the host system and the disc drive along a data path.
When data is to be stored on the storage device, the host system initially stores the data in a user buffer. Once stored in the buffer, the host sends a write command to the storage device, along with a pointer or some other address information related to the location of the data in the user buffer. Upon receiving the write command, the disc drive is responsible for accessing the information in the user buffer through a series of requests to a memory controller, such as a Direct Memory Access (DMA) controller. Upon receiving a request for the data, the DMA controller transmits the data across the data path to the disc drive, where the information may be stored in a disc drive buffer. Once received, the disc drive stores the data to the storage media.
Similarly, during a read operation, the host typically sends a read command to the disc drive, which, in turn, retrieves data from the storage media and stores the information in the disc drive buffer. The data is then transmitted along the data path to the user buffer. Once the information is in the user buffer, the host may access and use the data for its intended purpose.
Often, the data received or sent by the disc drive system is invalid or corrupt, i.e., not the same as the original data that host requested to be stored or retrieved. The reasons for such corruption may be several. For instance, the user or storage buffer may be modified prior to the actual transfer of the data, the address information may be incorrect and/or the data path may cause or otherwise create errors in the data, among others. These errors or inconsistencies in the stored data may result in significant problems in the operation of the computer system. Consequently, there is a need to verify that the data transmitted along the data path is not corrupt.
One method of verifying that the data is not corrupt relates to comparing stored data with data in the user buffer. That is, in one system, upon storing data on the storage media, the disc drive may transmit a notification to the host that the data has been stored. Upon receiving such a notification, the host may then send a read command to the disc drive, intending to read the information that was just stored. In this case, the disc drive then reads the data from the storage media and transmits the data to the host. The host is then able to perform a direct comparison between data stored on the storage media and the data in the user buffer.
This method of verifying data, unfortunately, requires that the data in the user buffer be maintained until that data is stored to the disc drive and retrieved from the disc drive, which significantly impacts the performance of the computer system as other resources may need to wait to use the buffer space. Moreover, re-reading the data from the storage media and transferring all the data back to the host system just to check data validity consumes a significant amount of time and resources, which also impairs performance. Consequently, many drives simply do not check the validity of the data path and suffer from poor reliability. Therefore, there is a need for a system and method of verifying the data by the host computer system and the disc drive that data is received from the other.
It is with respect to these and other considerations that the present invention has been made.
The present invention relates to a system and method of verifying data that has been transferred along a data path from one buffer, such as a user buffer in the host system to a second buffer, such as a disc drive buffer on a disc drive system by using the receiving device to test the information and provide a confirmation or error signal to the sending device. Thus, an embodiment relates to using the disc drive storage device to verify the data without sending all the data back to the host system. Indeed, the storage device can confirm the validity of the data or report errors back to the host system. Similarly, in another embodiment, when data is transferred from the disc drive system back to the host system, the host system can perform a comparison that detects whether errors have occurred during the transfer of information.
In order to achieve the validity testing, the system and method relates to using non-abstract identification tags that are appended to or otherwise merged with the abstract, application data to be stored to and/or read from the storage device. These tags, in essence, provide unique information that could be used by either the storage device or the host system to validate data received from the other by comparing the tag values to a predetermined control value that may be received prior to receiving the abstract data. In an embodiment, the system has a host computer system that has a file system with direct access to the user buffer. The file system injects an incrementing tag at sector boundaries of the user buffer. The tag may be confirmed both at the host interface of the disc drive device and during the process of writing to the storage media. In one embodiment, a check character is actually written to the media along with the user data in each sector.
With respect to certain aspects, the present invention relates to a system and method of verifying data transferred between a host computer system and a disc drive system along a data path. The system and method involves storing the data in a first buffer; storing an identification tag in the first buffer, the identification tag associated with the data in the user buffer; transferring a request to transfer the data wherein the request indicates the location of the data, the request further including identification information related to the identification tag; determining a control tag value based on the received identification information; transferring the data and associated identification tag from the first buffer along the data path to a second buffer; and comparing the control tag value to the identification tag received with the data to determine validity of the data.
In another embodiment, the first buffer is a user buffer located on the host computer system and the request to transfer information relates to a write command and the act of storing the data into the user buffer is performed by a file system module. In an alternative embodiment however, the act of storing the data into the user buffer may be performed by an application module. In yet another embodiment the first buffer is a disc drive buffer located on the disc drive system and the request to transfer relates to a read request conducted by the host computer system to the disc drive system.
Another embodiment relates to a system and method of verifying data as discussed above with respect to a write command but wherein the act of storing the data into the user buffer further involves dividing the user buffer into a plurality of sectors; storing data into the sectors; and appending identification tags to the end of each sector, wherein each subsequent identification tag is an incremented value of the previous identification tag. Additionally, the embodiment may involve determining control tag values for each sector based on information received in the request to transfer and comparing each of the control tag values to the identification tags received with the data to determine validity of the data. In yet another embodiment, upon receiving the data and associated tag information, the system and method inserts a logical block address value into each data sector, calculates a cyclic redundancy check value for the sector with the logical block address, and then stores the cyclic redundancy check value onto a storage medium with the data such that the logical block address can be determined at a later time.
In yet another embodiment, instead of appending the identification tag to each sector of abstract data, a table of such information is maintained. Further, the system and method calculates an error detection value, such as a CRC value for the identification tag and the abstract data. For instance the CRC value and the abstract data value are combined and a CRC value is calculated using the two values. Consequently, the embodiment calculates a first error detection value, the error detection value relating to both the identification tag and the associated data in the first buffer. The CRC value is then transferred along the data path with the abstract data. Next, a recalculation occurs, wherein the recalculation relates to recalculating the error detection value using the received abstract data and the identification tag to generate a second error detection value. Upon recalculating the second error detection value, the embodiment compares the second error detection value to the first error detection value received with the data to determine validity of the data. Typically, the recalculation algorithm is the same predetermined cyclic redundancy check algorithm used to generate the first error detection value.
The invention may be implemented as a computer process, a computing system, or as an article of manufacture such as a computer program product. The computer program product may be a computer storage medium readable by a computer system and encoding a computer program of instructions for executing a computer process. The computer program product may also be a propagated signal on a carrier readable by a computing system and encoding a computer program of instructions for executing a computer process.
A more complete appreciation of the present invention and its improvements can be obtained by reference to the accompanying drawings, which are briefly summarized below, to the following detailed description and presently preferred embodiments of the invention, and to the appended claims.